namespace ext.data
{
	using System;
	using System.Runtime.CompilerServices;
	using System.Html;
	using System.Collections;
	
	
	/// <summary>Configuration Structure</summary>
	/// <definedin>src\data\GroupingStore.js</definedin>
	public sealed class GroupingStore_Configuration : Record
	{
		
		#region Fields
		/// <summary>The field name by which to sort the store&apos;s data (defaults to &apos;&apos;).</summary>
		/// <definedin>src\data\GroupingStore.js</definedin>
		[ScriptName("groupField")]
		public string GroupField;
		
		/// <summary>
		/// True if the grouping should apply on the server side, false if it is local only (defaults to false). If the
		/// grouping is local, it can be applied immediately to the data. If it is remote, then it will simply act as a
		/// helper, automatically sending the grouping field name as the &apos;groupBy&apos; param with each XHR call.
		/// </summary>
		/// <definedin>src\data\GroupingStore.js</definedin>
		[ScriptName("remoteGroup")]
		public bool RemoteGroup;
		
		/// <summary>
		/// True to sort the data on the grouping field when a grouping operation occurs, false to sort based on the
		/// existing sort info (defaults to false).
		/// </summary>
		/// <definedin>src\data\GroupingStore.js</definedin>
		[ScriptName("groupOnSort")]
		public bool GroupOnSort;
		
		/// <summary>The direction to sort the groups. Defaults to &apos;ASC&apos;.</summary>
		/// <htmlSummary>The direction to sort the groups. Defaults to &lt;tt&gt;&apos;ASC&apos;&lt;/tt&gt;.</htmlSummary>
		/// <definedin>src\data\GroupingStore.js</definedin>
		[ScriptName("groupDir")]
		public string GroupDir;
		#endregion
		
		#region ext.data.Store_Configuration Members
		/// <summary>
		/// If passed, the id to use to register with the {@link Ext.StoreMgr StoreMgr}.
		/// Note: if a (deprecated) {@link #id} is specified it will supersede the storeId
		/// assignment.
		/// </summary>
		/// <htmlSummary>
		/// If passed, the id to use to register with the &lt;b&gt;{@link Ext.StoreMgr StoreMgr}&lt;/b&gt;.
		/// &lt;p&gt;&lt;b&gt;Note&lt;/b&gt;: if a (deprecated) &lt;tt&gt;{@link #id}&lt;/tt&gt; is specified it will supersede the &lt;tt&gt;storeId&lt;/tt&gt;
		/// assignment.&lt;/p&gt;
		/// </htmlSummary>
		/// <definedin>src\data\Store.js</definedin>
		[ScriptName("storeId")]
		public string StoreId;
		
		/// <summary>
		/// If a {@link #proxy} is not specified the url will be used to
		/// implicitly configure a {@link Ext.data.HttpProxy HttpProxy} if an url is specified.
		/// Typically this option, or the {@link #data} option will be specified.
		/// </summary>
		/// <htmlSummary>
		/// If a &lt;tt&gt;{@link #proxy}&lt;/tt&gt; is not specified the &lt;tt&gt;url&lt;/tt&gt; will be used to
		/// implicitly configure a {@link Ext.data.HttpProxy HttpProxy} if an &lt;tt&gt;url&lt;/tt&gt; is specified.
		/// Typically this option, or the &lt;code&gt;{@link #data}&lt;/code&gt; option will be specified.
		/// </htmlSummary>
		/// <definedin>src\data\Store.js</definedin>
		[ScriptName("url")]
		public string Url;
		
		/// <summary>
		/// If {@link #data} is not specified, and if autoLoad
		/// is true or an Object, this store&apos;s {@link #load} method is automatically called
		/// after creation. If the value of autoLoad is an Object, this Object will
		/// be passed to the store&apos;s {@link #load} method.
		/// </summary>
		/// <htmlSummary>
		/// If &lt;tt&gt;{@link #data}&lt;/tt&gt; is not specified, and if &lt;tt&gt;autoLoad&lt;/tt&gt;
		/// is &lt;tt&gt;true&lt;/tt&gt; or an &lt;tt&gt;Object&lt;/tt&gt;, this store&apos;s {@link #load} method is automatically called
		/// after creation. If the value of &lt;tt&gt;autoLoad&lt;/tt&gt; is an &lt;tt&gt;Object&lt;/tt&gt;, this &lt;tt&gt;Object&lt;/tt&gt; will
		/// be passed to the store&apos;s {@link #load} method.
		/// </htmlSummary>
		/// <definedin>src\data\Store.js</definedin>
		[ScriptName("autoLoad")]
		public ext.auto.System_Boolean_Or_System_Object AutoLoad;
		
		/// <summary>
		/// The {@link Ext.data.DataProxy DataProxy} object which provides
		/// access to a data object. See {@link #url}.
		/// </summary>
		/// <htmlSummary>
		/// The {@link Ext.data.DataProxy DataProxy} object which provides
		/// access to a data object. See &lt;code&gt;{@link #url}&lt;/code&gt;.
		/// </htmlSummary>
		/// <definedin>src\data\Store.js</definedin>
		[ScriptName("proxy")]
		public ext.data.DataProxy Proxy;
		
		/// <summary>
		/// An inline data object readable by the {@link #reader}.
		/// Typically this option, or the {@link #url} option will be specified.
		/// </summary>
		/// <htmlSummary>
		/// An inline data object readable by the &lt;code&gt;{@link #reader}&lt;/code&gt;.
		/// Typically this option, or the &lt;code&gt;{@link #url}&lt;/code&gt; option will be specified.
		/// </htmlSummary>
		/// <definedin>src\data\Store.js</definedin>
		[ScriptName("data")]
		public System.Array Data;
		
		/// <summary>
		/// The {@link Ext.data.DataReader Reader} object which processes the
		/// data object and returns an Array of {@link Ext.data.Record} objects which are cached keyed by their
		/// {@link Ext.data.Record#id id} property.
		/// </summary>
		/// <htmlSummary>
		/// The {@link Ext.data.DataReader Reader} object which processes the
		/// data object and returns an Array of {@link Ext.data.Record} objects which are cached keyed by their
		/// &lt;b&gt;&lt;tt&gt;{@link Ext.data.Record#id id}&lt;/tt&gt;&lt;/b&gt; property.
		/// </htmlSummary>
		/// <definedin>src\data\Store.js</definedin>
		[ScriptName("reader")]
		public ext.data.DataReader Reader;
		
		/// <summary>
		/// The {@link Ext.data.DataWriter Writer} object which processes a record object for being written
		/// to the server-side database.
		/// </summary>
		/// <htmlSummary>
		/// &lt;p&gt;The {@link Ext.data.DataWriter Writer} object which processes a record object for being written
		/// to the server-side database.&lt;/p&gt;
		/// &lt;br&gt;&lt;p&gt;When a writer is installed into a Store the {@link #add}, {@link #remove}, and {@link #update}
		/// events on the store are monitored in order to remotely {@link #createRecords create records},
		/// {@link #destroyRecord destroy records}, or {@link #updateRecord update records}.&lt;/p&gt;
		/// &lt;br&gt;&lt;p&gt;The proxy for this store will relay any {@link #writexception} events to this store.&lt;/p&gt;
		/// &lt;br&gt;&lt;p&gt;Sample implementation:
		/// &lt;pre&gt;&lt;code&gt;
		/// var writer = new {@link Ext.data.JsonWriter}({
		/// encode: true,
		/// writeAllFields: true // write all fields, not just those that changed
		/// });
		///
		/// // Typical Store collecting the Proxy, Reader and Writer together.
		/// var store = new Ext.data.Store({
		/// storeId: &apos;user&apos;,
		/// root: &apos;records&apos;,
		/// proxy: proxy,
		/// reader: reader,
		/// writer: writer, // &lt;-- plug a DataWriter into the store just as you would a Reader
		/// paramsAsHash: true,
		/// autoSave: false // &lt;-- false to delay executing create, update, destroy requests
		/// // until specifically told to do so.
		/// });
		/// &lt;/code&gt;&lt;/pre&gt;&lt;/p&gt;
		/// </htmlSummary>
		/// <definedin>src\data\Store.js</definedin>
		[ScriptName("writer")]
		public ext.data.DataWriter Writer;
		
		/// <summary>
		/// An object containing properties which are to be sent as parameters
		/// for every HTTP request.  Parameters are encoded as standard HTTP parameters using {@link Ext#urlEncode}.  Note: baseParams may be superseded by any params
		/// specified in a {@link #load} request, see {@link #load}
		/// for more details. 
		/// This property may be modified after creation using the {@link #setBaseParam}
		/// method.
		/// </summary>
		/// <htmlSummary>
		/// &lt;p&gt;An object containing properties which are to be sent as parameters
		/// for &lt;i&gt;every&lt;/i&gt; HTTP request.&lt;/p&gt;
		/// &lt;p&gt;Parameters are encoded as standard HTTP parameters using {@link Ext#urlEncode}.&lt;/p&gt;
		/// &lt;p&gt;&lt;b&gt;Note&lt;/b&gt;: &lt;code&gt;baseParams&lt;/code&gt; may be superseded by any &lt;code&gt;params&lt;/code&gt;
		/// specified in a &lt;code&gt;{@link #load}&lt;/code&gt; request, see &lt;code&gt;{@link #load}&lt;/code&gt;
		/// for more details.&lt;/p&gt;
		/// This property may be modified after creation using the &lt;code&gt;{@link #setBaseParam}&lt;/code&gt;
		/// method.
		/// </htmlSummary>
		/// <definedin>src\data\Store.js</definedin>
		[ScriptName("baseParams")]
		public object BaseParams;
		
		/// <summary>
		/// A config object to specify the sort order in the request of a Store&apos;s
		/// {@link #load} operation. Note that for local sorting, the direction property is
		/// case-sensitive. See also {@link #remoteSort} and {@link #paramNames}.
		/// For example: 
		/// sortInfo: {
		/// field: &apos;fieldName&apos;,
		/// direction: &apos;ASC&apos; // or &apos;DESC&apos; (case sensitive for local sorting)
		/// }
		/// </summary>
		/// <htmlSummary>
		/// A config object to specify the sort order in the request of a Store&apos;s
		/// {@link #load} operation. Note that for local sorting, the &lt;tt&gt;direction&lt;/tt&gt; property is
		/// case-sensitive. See also {@link #remoteSort} and {@link #paramNames}.
		/// For example:&lt;pre&gt;&lt;code&gt;
		/// sortInfo: {
		/// field: &apos;fieldName&apos;,
		/// direction: &apos;ASC&apos; // or &apos;DESC&apos; (case sensitive for local sorting)
		/// }
		/// &lt;/code&gt;&lt;/pre&gt;
		/// </htmlSummary>
		/// <definedin>src\data\Store.js</definedin>
		[ScriptName("sortInfo")]
		public object SortInfo;
		
		/// <summary>
		/// true if sorting is to be handled by requesting the {@link #proxy Proxy}
		/// to provide a refreshed version of the data object in sorted order, as opposed to sorting the Record cache
		/// in place (defaults to false).
		/// If remoteSort is true, then clicking on a {@link Ext.grid.Column Grid Column}&apos;s
		/// {@link Ext.grid.Column#header header} causes the current page to be requested from the server appending
		/// the following two parameters to the {@link #load params}:   sort : String The name (as specified in the Record&apos;s
		/// {@link Ext.data.Field Field definition}) of the field to sort on.   dir : String The direction of the sort, &apos;ASC&apos; or &apos;DESC&apos; (case-sensitive).
		/// </summary>
		/// <htmlSummary>
		/// &lt;tt&gt;true&lt;/tt&gt; if sorting is to be handled by requesting the &lt;tt&gt;{@link #proxy Proxy}&lt;/tt&gt;
		/// to provide a refreshed version of the data object in sorted order, as opposed to sorting the Record cache
		/// in place (defaults to &lt;tt&gt;false&lt;/tt&gt;).
		/// &lt;p&gt;If &lt;tt&gt;remoteSort&lt;/tt&gt; is &lt;tt&gt;true&lt;/tt&gt;, then clicking on a {@link Ext.grid.Column Grid Column}&apos;s
		/// {@link Ext.grid.Column#header header} causes the current page to be requested from the server appending
		/// the following two parameters to the &lt;b&gt;&lt;tt&gt;{@link #load params}&lt;/tt&gt;&lt;/b&gt;:&lt;div class=&quot;mdetail-params&quot;&gt;&lt;ul&gt;
		/// &lt;li&gt;&lt;b&gt;&lt;tt&gt;sort&lt;/tt&gt;&lt;/b&gt; : String&lt;p class=&quot;sub-desc&quot;&gt;The &lt;tt&gt;name&lt;/tt&gt; (as specified in the Record&apos;s
		/// {@link Ext.data.Field Field definition}) of the field to sort on.&lt;/p&gt;&lt;/li&gt;
		/// &lt;li&gt;&lt;b&gt;&lt;tt&gt;dir&lt;/tt&gt;&lt;/b&gt; : String&lt;p class=&quot;sub-desc&quot;&gt;The direction of the sort, &apos;ASC&apos; or &apos;DESC&apos; (case-sensitive).&lt;/p&gt;&lt;/li&gt;
		/// &lt;/ul&gt;&lt;/div&gt;&lt;/p&gt;
		/// </htmlSummary>
		/// <definedin>src\data\Store.js</definedin>
		[ScriptName("remoteSort")]
		public bool RemoteSort;
		
		/// <summary>
		/// true to destroy the store when the component the store is bound
		/// to is destroyed (defaults to false).
		/// Note: this should be set to true when using stores that are bound to only 1 component.
		/// </summary>
		/// <htmlSummary>
		/// &lt;tt&gt;true&lt;/tt&gt; to destroy the store when the component the store is bound
		/// to is destroyed (defaults to &lt;tt&gt;false&lt;/tt&gt;).
		/// &lt;p&gt;&lt;b&gt;Note&lt;/b&gt;: this should be set to true when using stores that are bound to only 1 component.&lt;/p&gt;
		/// </htmlSummary>
		/// <definedin>src\data\Store.js</definedin>
		[ScriptName("autoDestroy")]
		public bool AutoDestroy;
		
		/// <summary>
		/// true to clear all modified record information each time
		/// the store is loaded or when a record is removed (defaults to false). See {@link #getModifiedRecords}
		/// for the accessor method to retrieve the modified records.
		/// </summary>
		/// <htmlSummary>
		/// &lt;tt&gt;true&lt;/tt&gt; to clear all modified record information each time
		/// the store is loaded or when a record is removed (defaults to &lt;tt&gt;false&lt;/tt&gt;). See {@link #getModifiedRecords}
		/// for the accessor method to retrieve the modified records.
		/// </htmlSummary>
		/// <definedin>src\data\Store.js</definedin>
		[ScriptName("pruneModifiedRecords")]
		public bool PruneModifiedRecords;
		
		/// <summary>
		/// Defaults to true causing the store to automatically {@link #save} records to
		/// the server when a record is modified (ie: becomes &apos;dirty&apos;). Specify false to manually call {@link #save}
		/// to send all modifiedRecords to the server.
		/// </summary>
		/// <htmlSummary>
		/// &lt;p&gt;Defaults to &lt;tt&gt;true&lt;/tt&gt; causing the store to automatically {@link #save} records to
		/// the server when a record is modified (ie: becomes &apos;dirty&apos;). Specify &lt;tt&gt;false&lt;/tt&gt; to manually call {@link #save}
		/// to send all modifiedRecords to the server.&lt;/p&gt;
		/// &lt;br&gt;&lt;p&gt;&lt;b&gt;Note&lt;/b&gt;: each CRUD action will be sent as a separate request.&lt;/p&gt;
		/// </htmlSummary>
		/// <definedin>src\data\Store.js</definedin>
		[ScriptName("autoSave")]
		public bool AutoSave;
		
		/// <summary>
		/// Defaults to true (unless {@link #restful}:true). Multiple
		/// requests for each CRUD action (CREATE, READ, UPDATE and DESTROY) will be combined
		/// and sent as one transaction. Only applies when {@link #autoSave} is set
		/// to false.
		/// </summary>
		/// <htmlSummary>
		/// &lt;p&gt;Defaults to &lt;tt&gt;true&lt;/tt&gt; (unless &lt;code&gt;{@link #restful}:true&lt;/code&gt;). Multiple
		/// requests for each CRUD action (CREATE, READ, UPDATE and DESTROY) will be combined
		/// and sent as one transaction. Only applies when &lt;code&gt;{@link #autoSave}&lt;/code&gt; is set
		/// to &lt;tt&gt;false&lt;/tt&gt;.&lt;/p&gt;
		/// &lt;br&gt;&lt;p&gt;If Store is RESTful, the DataProxy is also RESTful, and a unique transaction is
		/// generated for each record.&lt;/p&gt;
		/// </htmlSummary>
		/// <definedin>src\data\Store.js</definedin>
		[ScriptName("batch")]
		public bool Batch;
		
		/// <summary>
		/// Defaults to false. Set to true to have the Store and the set
		/// Proxy operate in a RESTful manner. The store will automatically generate GET, POST,
		/// PUT and DELETE requests to the server. The HTTP method used for any given CRUD
		/// action is described in {@link Ext.data.Api#restActions}. For additional information
		/// see {@link Ext.data.DataProxy#restful}.
		/// Note: if {@link #restful}:truebatch will
		/// internally be set to false.
		/// </summary>
		/// <htmlSummary>
		/// Defaults to &lt;tt&gt;false&lt;/tt&gt;. Set to &lt;tt&gt;true&lt;/tt&gt; to have the Store and the set
		/// Proxy operate in a RESTful manner. The store will automatically generate GET, POST,
		/// PUT and DELETE requests to the server. The HTTP method used for any given CRUD
		/// action is described in {@link Ext.data.Api#restActions}. For additional information
		/// see {@link Ext.data.DataProxy#restful}.
		/// &lt;p&gt;&lt;b&gt;Note&lt;/b&gt;: if &lt;code&gt;{@link #restful}:true&lt;/code&gt; &lt;code&gt;batch&lt;/code&gt; will
		/// internally be set to &lt;tt&gt;false&lt;/tt&gt;.&lt;/p&gt;
		/// </htmlSummary>
		/// <definedin>src\data\Store.js</definedin>
		[ScriptName("restful")]
		public bool Restful;
		
		/// <summary>
		/// An object containing properties which specify the names of the paging and
		/// sorting parameters passed to remote servers when loading blocks of data. By default, this
		/// object takes the following form:  
		/// {
		/// start : &apos;start&apos;, // The parameter name which specifies the start row
		/// limit : &apos;limit&apos;, // The parameter name which specifies number of rows to return
		/// sort : &apos;sort&apos;, // The parameter name which specifies the column to sort on
		/// dir : &apos;dir&apos; // The parameter name which specifies the sort direction
		/// }
		///  The server must produce the requested data block upon receipt of these parameter names.
		/// If different parameter names are required, this property can be overriden using a configuration
		/// property.  A {@link Ext.PagingToolbar PagingToolbar} bound to this Store uses this property to determine
		/// the parameter names to use in its {@link #load requests}.
		/// </summary>
		/// <htmlSummary>
		/// &lt;p&gt;An object containing properties which specify the names of the paging and
		/// sorting parameters passed to remote servers when loading blocks of data. By default, this
		/// object takes the following form:&lt;/p&gt;&lt;pre&gt;&lt;code&gt;
		/// {
		/// start : &apos;start&apos;, // The parameter name which specifies the start row
		/// limit : &apos;limit&apos;, // The parameter name which specifies number of rows to return
		/// sort : &apos;sort&apos;, // The parameter name which specifies the column to sort on
		/// dir : &apos;dir&apos; // The parameter name which specifies the sort direction
		/// }
		/// &lt;/code&gt;&lt;/pre&gt;
		/// &lt;p&gt;The server must produce the requested data block upon receipt of these parameter names.
		/// If different parameter names are required, this property can be overriden using a configuration
		/// property.&lt;/p&gt;
		/// &lt;p&gt;A {@link Ext.PagingToolbar PagingToolbar} bound to this Store uses this property to determine
		/// the parameter names to use in its {@link #load requests}.
		/// </htmlSummary>
		/// <definedin>src\data\Store.js</definedin>
		[ScriptName("paramNames")]
		public object ParamNames;
		
		/// <summary>
		/// Provides the default values for the {@link #paramNames} property. To globally modify the parameters
		/// for all stores, this object should be changed on the store prototype.
		/// </summary>
		/// <definedin>src\data\Store.js</definedin>
		[ScriptName("defaultParamNames")]
		public object DefaultParamNames;
		#endregion
		
		#region ext.util.Observable_Configuration Members
		/// <summary>
		/// A config object containing one or more event handlers to be added to this
		/// object during initialization. This should be a valid listeners config object as specified in the
		/// {@link #addListener} example for attaching multiple handlers at once.
		/// </summary>
		/// <htmlSummary>
		/// &lt;p&gt;A config object containing one or more event handlers to be added to this
		/// object during initialization. This should be a valid listeners config object as specified in the
		/// {@link #addListener} example for attaching multiple handlers at once.&lt;/p&gt;
		/// &lt;br&gt;&lt;p&gt;&lt;b&gt;&lt;u&gt;DOM events from ExtJs {@link Ext.Component Components}&lt;/u&gt;&lt;/b&gt;&lt;/p&gt;
		/// &lt;br&gt;&lt;p&gt;While &lt;i&gt;some&lt;/i&gt; ExtJs Component classes export selected DOM events (e.g. &quot;click&quot;, &quot;mouseover&quot; etc), this
		/// is usually only done when extra value can be added. For example the {@link Ext.DataView DataView}&apos;s
		/// &lt;b&gt;&lt;code&gt;{@link Ext.DataView#click click}&lt;/code&gt;&lt;/b&gt; event passing the node clicked on. To access DOM
		/// events directly from a Component&apos;s HTMLElement, listeners must be added to the &lt;i&gt;{@link Ext.Component#getEl Element}&lt;/i&gt; after the Component
		/// has been rendered. A plugin can simplify this step:&lt;pre&gt;&lt;code&gt;
		/// // Plugin is configured with a listeners config object.
		/// // The Component is appended to the argument list of all handler functions.
		/// Ext.DomObserver = Ext.extend(Object, {
		/// constructor: function(config) {
		/// this.listeners = config.listeners ? config.listeners : config;
		/// },
		///
		/// // Component passes itself into plugin&amp;#39;s init method
		/// init: function(c) {
		/// var p, l = this.listeners;
		/// for (p in l) {
		/// if (Ext.isFunction(l[p])) {
		/// l[p] = this.createHandler(l[p], c);
		/// } else {
		/// l[p].fn = this.createHandler(l[p].fn, c);
		/// }
		/// }
		///
		/// // Add the listeners to the Element immediately following the render call
		/// c.render = c.render.{@link Function#createSequence createSequence}(function() {
		/// var e = c.getEl();
		/// if (e) {
		/// e.on(l);
		/// }
		/// });
		/// },
		///
		/// createHandler: function(fn, c) {
		/// return function(e) {
		/// fn.call(this, e, c);
		/// };
		/// }
		/// });
		///
		/// var combo = new Ext.form.ComboBox({
		///
		/// // Collapse combo when its element is clicked on
		/// plugins: [ new Ext.DomObserver({
		/// click: function(evt, comp) {
		/// comp.collapse();
		/// }
		/// })],
		/// store: myStore,
		/// typeAhead: true,
		/// mode: &apos;local&apos;,
		/// triggerAction: &apos;all&apos;
		/// });
		/// &lt;/code&gt;&lt;/pre&gt;&lt;/p&gt;
		/// </htmlSummary>
		/// <definedin>src\ext-core\src\util\Observable.js</definedin>
		/// <optional>Optional Field</optional>
		[ScriptName("listeners")]
		public object Listeners;
		#endregion
	}
}
